<?php
namespace Home\Controller;

//use Think\Controller;
use Util\AccessController;

/*引用相应的配置*/
require_once(THINK_PATH . "Library/Util/ChatPay/lib/WxPay.Config.php");
require_once(THINK_PATH . "Library/Util/ChatPay/lib/WxPay.Api.php");
require_once(THINK_PATH . "Library/Util/ChatPay/lib/WxPay.Data.php");
use ChatPay\lib\WxPayConfig;
use ChatPay\lib\WxPayApi;
use Util\ChatPay\JsApiPay;
use ChatPay\lib\WxPayUnifiedOrder;

//红包接口
require_once(THINK_PATH . "Library/Util/WxRedEnvelope/init.php");

//零钱接口
require_once(THINK_PATH . "Library/Util/CompaniesToPay/init.php");


/*通知*/
require_once(THINK_PATH . "Library/Util/WxSendMsg/SendMsg.php");

class WxPayController extends AccessController {

    /*
     * 微信支付入口
     */
    public function index() {
        $openid = $this->S('openid');
        $this->Set(1* 100,$openid, '由享越悦提供', 123456890);

    }

    //    调用支付接口
    public function Set($money, $openid, $info, $data) {
        $input = new WxPayUnifiedOrder();
        $input->SetBody($info);//设置商品或支付单简要描述
        $input->SetAttach($data);//设置附加数据，在查询API和支付通知中原样返回，该字段主要用于商户携带订单的自定义数据
        $input->SetOut_trade_no(WxPayConfig::MCHID . date("YmdHis"));//设置商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号
        $input->SetTotal_fee($money);//设置订单总金额，只能为整数，详见支付金额
        $input->SetTime_start(date("YmdHis"));//设置订单生成时间，格式为yyyyMMddHHmmss
        $input->SetTime_expire(date("YmdHis", time() + 600));//设置订单失效时间，格式为yyyyMMddHHmmss
        $input->SetGoods_tag($SID = 'G123456789');//设置商品标记，代金券或立减优惠功能的参数，说明详见代金券或立减优
        $input->SetOpenid($openid);//用户在商户appid下的唯一标识
        $input->SetNotify_url(C('WX_PAY_URL') . "WxPay/NotifyCall/");//设置接收微信支付异步通知回调地址
        $input->SetTrade_type("JSAPI");//设置取值如下：JSAPI，NATIVE，APP，详细说明见参数规定
        $input->SetProduct_id($SID);//此id为二维码中包含的商品ID，商户自行定义。
        $order = WxPayApi::unifiedOrder($input);// 统一下单
        $tools = new JsApiPay();//JSAPI支付实现类
        $jsApiParameters = $tools->GetJsApiParameters($order);//获取jsapi支付的参数


        //页面详情
        $this->OID = $data;
        $this->MONEY = $money;
        $this->TEAMNAME = $info;
        $this->jsApiParameters = $jsApiParameters;
        $this->display('Pay/NativePay');
    }


    //微信支付js调用
    public function JsPay() {
        $OID = $_POST['ID'];
        $where['order_id'] = $OID;
        $LS = Service('Order', 'order');
        $Odata = $LS->find($where);
        //用户可支付余额
        $YE_PAY_LS = Service('Pay', 'cost');
        $YECOST = $YE_PAY_LS->YE_Pay($Odata['user_id'], $Odata['order_money'], $Odata['order_id'], 0);
        if ($Odata) {
            $LS1 = Service('Order', 'u_user');
            $Udata = $LS1->find(array('user_id' => $Odata['user_id']));
        } else {
            $DATA = ResErrorData(5);
            $this->ajaxReturn($DATA);
        }
        $money = ($Odata['order_money'] - $YECOST) * 100;
        $openid = $Udata['user_wx'];
        $info = '由奇妙阅平台提供';
        $data = $OID;
        $input = new WxPayUnifiedOrder();
        $input->SetBody($info);//设置商品或支付单简要描述
        $input->SetAttach($data);//设置附加数据，在查询API和支付通知中原样返回，该字段主要用于商户携带订单的自定义数据
        $input->SetOut_trade_no(WxPayConfig::MCHID . date("YmdHis"));//设置商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号
        $input->SetTotal_fee($money);//设置订单总金额，只能为整数，详见支付金额
        $input->SetTime_start(date("YmdHis"));//设置订单生成时间，格式为yyyyMMddHHmmss
        $input->SetTime_expire(date("YmdHis", time() + 600));//设置订单失效时间，格式为yyyyMMddHHmmss
        $input->SetGoods_tag($SID = 'G123456789');//设置商品标记，代金券或立减优惠功能的参数，说明详见代金券或立减优
        $input->SetOpenid($openid);//用户在商户appid下的唯一标识
        $input->SetNotify_url(C('WX_PAY_URL') . "WxPay/NotifyCall/");//设置接收微信支付异步通知回调地址
        $input->SetTrade_type("JSAPI");//设置取值如下：JSAPI，NATIVE，APP，详细说明见参数规定
        $input->SetProduct_id($SID);//此id为二维码中包含的商品ID，商户自行定义。
        $order = WxPayApi::unifiedOrder($input);// 统一下单
        $tools = new JsApiPay();//JSAPI支付实现类
        $jsApiParameters = $tools->GetJsApiParameters($order);//获取jsapi支付的参数

        //页面详情
        $DATA['WxRes'] = $jsApiParameters;
        $DATA['OID'] = $data;
        $DATA['MONEY'] = $money;
        $DATA['TEAMNAME'] = $info;
        $RES = ResData($DATA);
        $this->ajaxReturn($RES, 'JSON');
    }

    //回调函数入库
    public function NotifyCall() {
        //初始化日志
        $filename = C('WXPAY_LOG') . '/' . date('Y-m-d') . '.log';
        $word = "微信支付访问回调函数\r\n\r\n";  //双引号会换行 单引号不换行
        file_put_contents($filename, $word, FILE_APPEND);
        //        回调处理
        $call = new \Home\Util\PayNotify();
        $call->Handle(false);
    }


    /*
     * 微信红包
     * 用于提现
     */
    public function RedEnvelope() {
        $LS = Service('M', 'u_user');
        $USER_ID = passport_decrypt($_POST['token'], C('JM_KEY'));
        $where['user_id'] = $USER_ID;
        $Udata = $LS->find($where);
        $LS1 = Service('M', 'cost');
        $where1['USER_ID'] = $USER_ID;
        $Cdata = $LS1->find($where1);
        $money = $_POST['money'];
        if ($Udata && $Cdata && is_numeric($money)) {
            $Umoney = passport_decrypt($Cdata['MONEY'], C('JM_KEY'));
            if ($Umoney - $money >= 0) {
                $temp = new \Util\WxRedEnvelope\init();
                /*
                * 设置参数
                * $OPENID 发送红包对象openid
                * $send_name 商户名称
                * $total_amount 付款金额
                * $total_num 红包发放总人数
                * $wishing 红包祝福语
                * $act_name 活动名称
                * $remark 备注
                */
                $temp->set($Udata['user_wx'], '奇妙阅', $money * 100);
                $data = $temp->index();
                $json = (array)simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA);
                if ($json['result_code'] == 'SUCCESS') {
                    $C_LS = Service('Cost', 'cost');
                    $OK = $C_LS->UserCostAdd($USER_ID, $money, $order_id = null);
                    if ($OK) {
                        $DATA = ResData($json);
                        $this->ajaxReturn($DATA);
                    } else {
                        $DATA = ResErrorData(2);
                        $this->ajaxReturn($DATA);
                    }
                } else {
                    $DATA = ResData($json);
                    $this->ajaxReturn($DATA);
                }
            } else {
                $DATA = ResErrorData(10);
                $this->ajaxReturn($DATA);
            }

        } else {
            $DATA = ResErrorData(8);
            $this->ajaxReturn($DATA);
        }

    }

    /*
     * 微信零钱
     * 用于提现
     */
    /*
       * 微信零钱
       * 用于提现
       */
    public function WxLqPay() {

        $pay = new \Util\CompaniesToPay\init();
        $pay->Setinit('oehHr07DccdpUlqE308eNanIT2ZQ', 1 * 100, '提现');
        $POK = $pay->hanld();
        dump($POK);

    }


}